package com.rchat.pocmini.session;

import com.airtalkee.sdk.entity.AirContact;
import com.airtalkee.sdk.entity.AirSession;

import java.util.List;

/**
 * Created by ljd on 2017/2/8.
 * <p>
 * AirtalkeeSessionManager 接口规范
 */

public interface PocAirtalkeeSessionManagerInterface {

//     AudioModeGet此方法找不到
//    /**
//     * 获取音频设备模式
//     * @param context 应用上下文
//     */
//    int getAudioMode(Context context);


//     AudioModeSet此方法找不到
//    /**
//     * 设置音频设备模式
//     * @param context 应用上下文
//     * @param int AudioManager对象的常量参数如：MODE_NORMAL、MODE_IN_CALL
//     */
//    void setAudioMode(Context context,int mode);

    /**
     * 发起对一个人或多个人的临时呼叫，或进入频道会话
     *
     * @param contacts 被叫的列表
     */
    AirSession sessionCall(List<AirContact> contacts);

    /**
     * 发起对一个人或多个人的临时呼叫，或进入频道会话
     *
     * @param channelId 欲进入的频道ID
     */
    AirSession sessionCall(String channelId);

    /**
     * 结束制定的临时呼叫，或取消正在呼叫的临时呼叫，或退出频道会话
     *
     * @param session 制定的会话实例
     */
    void sessionBye(AirSession session);

    /**
     * 接听临时呼叫来电
     *
     * @param session 制定的会话实例
     */
    void sessionIncomingAccept(AirSession session);

    /**
     * 拒绝临时呼叫来电
     *
     * @param session 指定的会话实例
     */
    void sessionIncomingReject(AirSession session);

    /**
     * 邀请他人加入制定临时会话
     *
     * @param sessionCode 临时会话的ID
     * @param memberIds   邀请加入的用户ID列表
     */
    void sessionCallJoin(String sessionCode, List<String> memberIds);

    /**
     * 在会话中申请话语权
     *
     * @param session 制定的会话实例
     */
    boolean talkRequest(AirSession session);

    /**
     * 在会话中申请话语权
     *
     * @param session 指定的会话实例
     * @param toGrap  指定是否抢断他人话语权（用户必须拥有比当前讲话人更高的优先级，
     *                才可抢断，否则将会作为一般申请话语权的动作处理）
     */
    boolean talkRequest(AirSession session, boolean toGrap);

    /**
     * 在会话中释放话语权
     *
     * @param session 制定的会话实例
     */
    void talkRelease(AirSession session);

    /**
     * 此接口专门为通过点击PTT按钮而设计，SDK会自动记录PTT按钮的状态，
     * 从而无需UI关心，SDK将会通过OnMediaListener.onMediaButtonState自动通知UI，
     * PTT按钮应该是什么状态。
     *
     * @param session
     */
    void talkButtonClick(AirSession session);

    /**
     * 设置应答模式
     *
     * @param mode 应答模式
     */
    void setSessionDialogAnswerMode(int mode);

    /**
     * 设置免打扰模式
     *
     * @param isb true为免打扰开启
     */
    void setSessionDialogIsbMode(boolean isb);

    /**
     * 开启实时音频的本地录制，事件返回OnMessagePttListener.onMessagePttRecord
     */
    void mediaRealtimeRecordEnable();

    /**
     * 关闭实时音频的本地录制,事件返回OnMessagePttListener.onMessagePttRecord
     */
    void mediaRealtimeRecordDisable();


    /**
     * 开启或关闭实时音频的本地录制
     *
     * @param isEnable true开启，false关闭
     */
    void setSessionLocalRecordEnable(boolean isEnable);

    /**
     * 设置监听器
     *
     * @param listener 监听器
     */
    void setListener(PocAirtalkeeSessionListener listener);
}
